package com.xhh.nphm.gaoxin.service;


import com.baomidou.mybatisplus.extension.service.IService;
import com.xhh.nphm.common.core.domain.QueryConditionVo;
import com.xhh.nphm.gaoxin.entity.GxqMuReplyWaitTelExcel;
import com.xhh.nphm.gaoxin.entity.GxqTwfSendBackEty;
import com.xhh.nphm.system.domain.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public interface GxqIWfSendBackService extends IService<GxqTwfSendBackEty> {

    /**
     * 新增 拟派工单
     *
     * @param twfSendBackEty
     * @return
     */
    int insert(GxqTwfSendBackEty twfSendBackEty);

    /**
     * 根据 工单id 查 拟派工单列表
     *
     * @param wfId
     * @return
     */
    List<GxqTwfSendBackEty> selectByWfId(Integer wfId);

    /**
     * TwfSendBackEty selectByGetDealPk(Integer id);
     * 调整承办部门 列表数据
     * <p>
     * <p>
     * TwfSendBackEty selectByPkId(Integer sid);
     *
     * @return
     */
    List<GxqTwfSendBackEty> sendBackListJson(GxqTwfSendBackEty twfSendBackEty);

    /**
     * 下级退回电话工单审核 列表
     *
     * @param twfSendBackEty
     * @return
     */
    List<GxqTwfSendBackEty> treturnFlowJson(GxqTwfSendBackEty twfSendBackEty, String deptNo);

    GxqTwfSendBackEty selectByPkId(Integer sid);

    GxqTwfSendBackEty selectByGetDealPk(Integer id);

    int updateSendBack(GxqTwfSendBackEty twfSendBackEty);

    /**
     * 根据 wfid 查询单个 派单记录
     *
     * @param wfId
     * @return
     */
    GxqTwfSendBackEty getByWfId(Integer wfId);

    /**
     * 修改 退回审核 派单状态
     *
     * @param
     * @return
     */
    int updateTwfSendBack(String sendRemark, Integer backState, Integer pkId);

    /**
     * 根据id 进行多选删除 和单个删除
     *
     * @param ids
     * @return
     */
    int deleteByIds(String[] ids);

    /**
     * 查找待本部门回复的工单数据
     *
     * @param deptId 部门id
     * @return 工单列表数据
     */
    List<Map<String, Object>> muReplyWaitJson(Long deptId, QueryConditionVo qc);

    /**
     * 查找待本部门回复的工单数据导出
     *
     * @param deptId 部门id
     * @return 工单列表数据
     */
    List<GxqMuReplyWaitTelExcel> muReplyWaitJsonExport(Long deptId, QueryConditionVo qc);

    /**
     * 市级未签收列表数据
     *
     * @param twfSendBackEty
     * @param
     * @return
     */
    List<GxqTwfSendBackEty> muSignNotJson(GxqTwfSendBackEty twfSendBackEty, String deptId);

    List<GxqTwfSendBackEty> muSignNotJson_gxq(GxqTwfSendBackEty twfSendBackEty, String deptId);

    /**
     * 查找审核本级回复的工单数据
     *
     * @param deptId 部门id
     * @return 工单列表数据
     */
    List<Map<String, Object>> muReplyChkJson(Long deptId, String workFormNo, String sdeptName);

    /**
     * 查找本部门已办毕的工单数据
     *
     * @param deptId     部门id
     * @param workFormNo 工单编号
     * @param sdeptName  派发单位
     * @return 工单列表数据
     */
    List<Map<String, Object>> muReplyOverJson(Long deptId, String workFormNo, String sdeptName);

    /**
     * 查找本部门退回的工单数据
     *
     * @param deptId     部门id
     * @param workFormNo 工单编号
     * @param sdeptName  派发单位
     * @return 工单列表数据
     */
    List<Map<String, Object>> muDeptBackJson(Long deptId, String workFormNo, String sdeptName);

    List ltSendBackMain(int wfId, String sdeptId);

    /**
     * 查找待分发下级工单数据
     *
     * @param deptId     部门id
     * @param workFormNo 工单编号
     * @param sdeptName  派发单位
     * @return 工单列表数据
     */
    List<Map<String, Object>> sendWaitListJson(Long deptId, String workFormNo, String sdeptName);

    List<Map<String, Object>> sendWaitListJson_gxq(Long deptId, String workFormNo, String sdeptName);

    /**
     * 查找上级不同意退回工单数据
     *
     * @param deptId    部门编号
     * @param sdeptName 派发单位
     * @return 列表数据
     */
    List<Map<String, Object>> notPassListJson(Long deptId, String workFormNo, String sdeptName);

    /**
     * 查找下级退回工单数据
     *
     * @param deptId    部门编号
     * @param sdeptName 派发单位
     * @return 列表数据
     */
    List<Map<String, Object>> listSonBackJson(Long deptId, String workFormNo, String sdeptName);

    /**
     * 查找承办单位已退工单数据
     *
     * @param params 查询条件
     * @return 列表数据
     */
    List<Map<String, Object>> listSonAgreeBackJson(HashMap<String, Object> params);

    List<Map<String, Object>> listSonAgreeBackJson_gxq(HashMap<String, Object> params);

    /**
     * 查找承办单位未签收工单数据
     *
     * @param params 查询条件
     * @return 列表数据
     */
    List<Map<String, Object>> listSonSignNotJson(HashMap<String, Object> params);

    List<Map<String, Object>> listSonSignNotJson_gxq(HashMap<String, Object> params);

    /**
     * 查找临期工单数据(差2天 超出办理期限工单)
     *
     * @param params 查询条件
     * @return 列表数据
     */
    List<Map<String, Object>> muBlueSJson(HashMap<String, Object> params);

    /**
     * 查找超期工单列表数据（超出办理期限工单）
     *
     * @param params 查询条件
     * @return 列表数据
     */
    List<Map<String, Object>> muRedSJson(HashMap<String, Object> params);

    /**
     * 查找本区办理工单列表
     *
     * @param params 查询条件
     * @return 列表数据
     */
    List<Map<String, Object>> rptReplyOverListJson(HashMap<String, Object> params);

    /**
     * 下级办理中T 列表数据
     *
     * @param
     * @param qc
     * @return
     */
    List<Map<String, Object>> listSonWaitJson(QueryConditionVo qc);

    List<Map<String, Object>> listSonWaitJson_gxq(QueryConditionVo qc);

    /**
     * 查找本区未转派工单列表
     *
     * @param params 查询条件
     * @return 列表数据
     */
    List<Map<String, Object>> rptSendWaitListJson(HashMap<String, Object> params);

    List<Map<String, Object>> rptSendWaitListJson_gxq(HashMap<String, Object> params);

    /**
     * 查找本区被市级拒退工单列表
     *
     * @param params 查询条件
     * @return 列表数据
     */
    List<Map<String, Object>> rptNotPassListJson(HashMap<String, Object> params);

    /**
     * 查找本级已退工单列表
     *
     * @param params 查询条件
     * @return 列表数据
     */
    List<Map<String, Object>> rptDeptBackJson(HashMap<String, Object> params);

    /**
     * 查找本级未签收工单列表
     *
     * @param
     * @return 列表数据
     */
    List<Map<String, Object>> rptSignNotJson(String sbdeptId, GxqTwfSendBackEty sendBackEty);

    List<Map<String, Object>> rptSignNotJson_gxq(String sbdeptId, GxqTwfSendBackEty sendBackEty);

    /**
     * 下级已办毕T列表数据
     * @param workFormNo
     * @param sdeptName
     * @param deptId
     * @return
     */
    List<Map<String, Object>> listSonOverJson(String workFormNo, String sdeptName, String deptId);
    /**
     * 加载派单管理列表数据
     * @param sendBack 查询条件
     * @param deptId 部门编号
     * @return 列表数据
     */
    List<Map<String, Object>> sendBackJson(GxqTwfSendBackEty sendBack, Long deptId);

    /**
     * 派单情况列表数据
     * @param wfId 工单编号
     * @return 列表数据
     */
    List<GxqTwfSendBackEty> dealListJson(Integer wfId);

    /**
     * 检查二级部门下派的派单记录是否有下级回复
     * @param wfId 工单id
     * @param sdeptId 拟派部门编号
     * @return 已回复/''
     */
    List<CheckSendBack> checkSendBack(Integer wfId, String sdeptId);

    /**
     * 查找下级部门办理件
     * @param wfId 工单id
     * @param sdeptId 部门编号
     * @return 派单列表
     */
    List<GxqTwfSendBackEty> listSendDeptSon(Integer wfId, Long sdeptId);

    /**
     * 查找下级部门办理件
     * @param wfId 工单id
     * @param sdeptId 部门编号
     * @return 派单列表
     */
    List<GxqTwfSendBackEty> findSubDeptHandleWF(Integer wfId, Long sdeptId);

    /**
     * 查找下级部门办理件 通过当前派单id作为pid查找
     *
     * @param pkId 派单id
     * @param sdeptId 下派部门
     * @return
     */
    List<GxqTwfSendBackEty> listSendSubDeptByPid(Integer pkId, Long sdeptId);

    /**
     * 查找下级退回待处理的工单
     * @param deptId 部门编号
     * @param workFormNo 工单编号
     * @param sdeptName 来源单位
     * @return 列表数据
     */
    List<Map<String, Object>> listSonNABackJson(Long deptId, String workFormNo, String sdeptName);

    List<Map<String, Object>> listSonNABackJson_gxq(Long deptId, String workFormNo, String sdeptName);

    /**
     * 查找下级退回已处理的工单
     * @param deptId 部门编号
     * @param workFormNo 工单编号
     * @param sdeptName 来源单位
     * @return 列表数据
     */
    List<Map<String, Object>> listSonABackJson(Long deptId, String workFormNo, String sdeptName);

    /**
     * 查找下级退回已处理的工单
     * @return 列表数据
     */
    List<Map<String, Object>> listAllSonABackJson(QueryConditionVo qc);

    /**
     * 查询下级部门的电话未签收、未回复、退回和超期情况数据统计
     *  2023/1/3
     *  @Param params
     */
    List<Map<String, Object>> listTelSubStatisticsJson(HashMap<String, Object> params);

    /**
     * 市级已删除电话工单
     * @param twfSendBackEty
     * @param deptId
     * @return
     */
    List<Map<String,Object>> deleteTelWFJson(GxqTwfSendBackEty twfSendBackEty, String deptId);

    /**
     * 催办派单
     * @param sbId 判单id
     * @return
     */
    boolean updateUrgeTransact(String sbId);

    /**
     * 下级已办毕T 待处理列表数据
     * @param workFormNo
     * @param sbDeptName
     * @param deptId
     * @return
     */
    List<Map<String, Object>> listSonOverUntreatedJson(String workFormNo, String sbDeptName, String deptId);

    List<Map<String, Object>> listSonOverUntreatedJson_gxq(String workFormNo, String sbDeptName, String deptId);

    /**
     * 下级已办毕T 已处理列表数据
     * @param workFormNo
     * @param sbDeptName
     * @param deptId
     * @return
     */
    List<Map<String, Object>> listSonOverTreatedJson(String workFormNo, String sbDeptName, String deptId);

    /**
     * 市级未签收列表数据
     *
     * @param twfSendBackEty
     * @param
     * @return
     */
    List<GxqTwfSendBackEty> notSignList(GxqTwfSendBackEty twfSendBackEty, String deptId);

    /**
     * 查找审核本级回复的工单数据
     *
     * @return 工单列表数据
     */
    List<Map<String, Object>> waitReplyListJson(GxqTwfSendBackEty twfSendBackEty, String sdeptName);

    /**
     * 查找当前部门办理件
     * //TODO 待完善：使用pid
     * @param wfId    工单id
     * @param deptId 部门编号
     * @return 派单列表
     */
    GxqTwfSendBackEty curDeptHandleSend(Integer wfId, String deptId);

    /**
     * 查询未处理电话工单数据
     * @param deptId 办理部门
     * @param twfSendBackEty 电话工单
     * @return
     */
    List<Map<String, Object>> notHandleTelJson(String deptId, GxqTwfSendBackEty twfSendBackEty);

    List<Map<String, Object>> notHandleTelJson_gxq(String deptId, GxqTwfSendBackEty twfSendBackEty);

    /**
     * 导出未处理电话工单数据
     * @param deptId 办理部门
     * @return
     */
    List<NotHandleTelExcel> notHandleTelExport(String deptId);

    /**
     * 上级催办电话数据
     * @param deptId 办理部门
     * @param twfSendBackEty 电话派单
     * @return
     */
    List<Map<String, Object>> supUrgeTelOrderJson(String deptId, GxqTwfSendBackEty twfSendBackEty);

    /**
     * 查询上级催办电话工单数据
     * @param deptId 办理部门
     * @return
     */
    List<SupUrgeTelExcel> supUrgeTelOrderExport(String deptId);

    /**
     *
     * @param subDeptId
     * @return
     */
    List<Map<String, Object>> subDeptTelDetailJson(String subDeptId,GxqTwfSendBackEty twfSendBackEty);


    List<Map<String, Object>> subDeptTelDetailJson_gxq(String subDeptId,GxqTwfSendBackEty twfSendBackEty);

    /**
     * 查询临期工单数量
     * 高新区
     * @param deptId 部门编号
     * @return 临期工单数量
     */
    int dueWorkOrderCount(String deptId);

    /**
     * 查找待本部门回复的工单数据
     * 高新区
     * @param deptId 部门编号
     * @param qc 查询参数
     * @return 工单列表数据
     */
    List<Map<String, Object>> muReplyWaitJson_gxq(Long deptId, QueryConditionVo qc);

    /**
     * 查找审核本级回复的工单总数
     *
     * @param deptId     部门id
     * @return 工单列表数据
     */
    Integer countMuReplyChkJson(Long deptId);

    /**
     * 获取审核本级回复的工单数据
     *
     * @param deptId 部门id
     * @return 工单列表数据
     */
    List<Map<String, Object>> getMuReplyChkJson(Long userNo, Long deptId, QueryConditionVo queryConditionVo);

    /**
     * 查找审核本级回复的工单数据
     *
     * @param deptId 部门id
     * @return 工单列表数据
     */
    List<Map<String, Object>> muReplyChkJsonData(Long deptId, QueryConditionVo queryConditionVo);

    /**
     * 查找本部门已办毕的工单数据
     * @param deptId 部门id
     * @param queryConditionVo 查询参数
     * @return 工单列表数据
     */
    List<Map<String, Object>> muReplyOverJsonData(Long deptId, QueryConditionVo queryConditionVo);

    /**
     * 加载(区县)退回的工单T列表数据
     * 高新区
     * @param deptId 部门编号
     * @param queryConditionVo 查询参数
     * @return 列表数据
     */
    List<Map<String, Object>> backPeerDeptAuditTJson(Long deptId, QueryConditionVo queryConditionVo);

    List<Map<String, Object>> backPeerDeptAuditTJson_gxq(Long deptId, QueryConditionVo queryConditionVo);

    /**
     * 加载上级不同意退回列表数据
     * 高新区
     * @param deptId 部门编号
     * @param queryConditionVo 查询参数
     * @return 列表数据
     */
    List<Map<String, Object>> peerDeptNotPassListJson(Long deptId, QueryConditionVo queryConditionVo);

    /**
     * 获取待本级回复的列表
     * @param num 获取数量
     * @param sbdeptId 承办部门
     * @return
     */
    List<GxqTwfSendBackEty> getAWaitPeerReplyList(Integer num, String sbdeptId);

    /**
     * 查找待本部门回复的工单数据导出
     * 高新区
     * @param deptId 部门id
     * @return 工单列表数据
     */
    List<GxqMuReplyWaitTelExcel> muReplyWaitJsonExport_gxq(Long deptId, QueryConditionVo qc);
}